Many printers use an imaging scheme in which the image to be printed is represented as an array of individual image points called "pels" (short for "picture element"). A typical laser printer can print an image with a resolution of about 300 pels per inch. On such a printer, an 8-inch by 10-inch image would consist of a set of 7,200,000 pels. In the simplest case where pels are restricted to two values--black and white--such an image could be represented by a set of 900,000 eight-bit bytes. Thus, an equivalency exists between an image to be reproduced and a set of digital values. The digital values which represent an image, and the image produced from a set of digital values, are referred to interchangeably herein as a bit-mapped image. Color images, being somewhat more complex than black and white images, require a larger number of bytes to define. For simplicity, only black-and-white bit-mapped images will be discussed herein. However, the preferred embodiments described herein can easily be modified for use with color bit-mapped images.
To print a bit-mapped image stored in a computer memory, that image must first be transferred from the computer to the printer along a printer interface. Personal computers use either a serial or a parallel printer interface. Serial connections typically can transfer data at a rate of about 1920 bytes/second while parallel connections are usually 5 to 10 times faster. Ignoring any overhead in the printer's command language, a full-page bit-mapped image transferred along a serial connection might require about 470 seconds; a parallel connection might require about 95 seconds. Since many printers can print a full page within 10 seconds after they receive the bit-mapped image, the data transfer represents a significant bottleneck.
Typical printers used with personal computers are usually raster-style printers which print according to a predetermined scan pattern. While scan patterns will vary from printer to printer, it will be assumed herein that scanning is performed left-to-right along a horizontal row, and then left to right one, row down, and so on. The current print position is referred to herein as the cursor position, or simply as the cursor.
To print an image on a raster printer three pieces of information may be required: (1) the pel image data at each pel location; (2) the page coordinates for each pel; and (3) the direction in which the cursor is to move to the next pel. The pel image data is always required since it informs the printer what is to be printed at each pel. However, the page coordinates for each pel and the cursor movement direction usually need not be specifically transmitted since the cursor movement direction follows the printer scan pattern and the current page coordinate is usually kept internally by the printer during printing. When printing, the printer prints a pel, moves to the next pel position according to the scan pattern, internally updates the cursor position, associates the updated cursor position with pel image data for that location, and prints that pel. This process continues until the cursor sweeps as far to the right as permitted, or when a new row is command by the computer, the cursor automatically resets to the far left position, called the left margin, one vertical row down. Thus, only the initial page coordinate usually must be sent to the printer to synchronize the starting cursor position with the pel image data. In some modern printers the left and right margins are not fixed, but rather the margins may be adjusted using software commands. These adjustable margins permit the computer to control column-wise where printing is to occur. Printers with adjustable margins typically will also automatically reset the cursor to the left margin, one row down, when the cursor reaches the right margin.
It frequently occurs when printing bit-mapped images that large column-wise sections of the image, hereinafter call gaps, do not contain HIGH data values. A typical gap is illustrated by the blank column 2 in the bit-mapped image 4 of FIG. 1. One possible method of optimizing the sending of the bit-mapped image to the printer is for the computer to send cursor movement commands which cause the cursor to jump over the blank column 2 when the cursor reaches the left edge 6 of the blank column. These cursor movement commands involve the sending of data from the computer to the printer to inform the printer when and how far to move the cursor. Such commands would preferably not be used when the amount of data corresponding to the gap is less than the data stream required to cause the cursor to jump. This jumping process is illustrated in FIG. 1 by a movement arrow 8 that indicates cursor movement. Since row one 10 has no gap, the cursor moves pel-by-pel until it reaches the fight margin 12, at which time the cursor automatically resets to the left margin 14, one row down. While printing row two 16, the cursor eventually encounters the blank column 2. The computer then transmits to the printer a movement command which causes the cursor to jump the blank column, as shown by the hump 18 traced by the movement arrow 8. After jumping the blank column 2 the cursor continues printing until the right margin 12 is again reached, at which time the cursor automatically returns to the left margin 14, one row down. When printing the third row 20, the computer again causes the cursor to jump the blank column. This process continues until the bit-mapped image has been completely printed.
While the above printing scheme is generally successful, some bit-mapped images are comprised of numerous irregular blank columns which separate column-wise portions of the bit-mapped image, called herein raster columns, which have had to be sent bit-by-bit. According to the above-described method of transferring data within the raster columns, many cursor movement commands would be required due to the irregularity of the blank columns. Therefore, it would be beneficial to have a method of sending raster columns from a computer to a printer without using cursor movement commands to jump intervening blank columns.